function add(a, b, c) {
    return a + b + c;
  }
  
  // add(1, 2)
  
  // let addCurry = curry(add);
  // addCurry(1)(2);  // 3
  
  
  
  function curry(fn,...args) {
    let length = fn.length;
    args = args || []; 

    return function() {
        let _args =args.slice(0),arg; //_args 是curry函数接收的参数
        for(let i=0;i<arguments.length;i++){ //返回的function帮接受了多少个参数
            arg = arguments[i];
            _args.push(arg);
        }
        //curry接收的参数个数+第一次返回的function接收的参数个数 < fu的参数个数
        //如果小于就继续返回一个function
        if(_args.length < length){
          return curry(fn,..._args);
        }else{  
           return fn(..._args); // 执行原函数                
        }

    }
  
  }
  
  const res = curry(add,3);
  const sum = res(1)(2)(3) // 6
//   console.log(sum);
  
//    console.log( res(1)(2, 3));
    // 6
  res(1, 2)(3) // 6
  res(1, 2, 3) // 6

  console.log(res(1)(2)(3))